package com.th.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.th.mapper.ProductInfoMapper;
import com.th.pojo.ProductInfo;
import com.th.pojo.ProductInfoExample;
import com.th.pojo.vo.ProductInfoVo;
import com.th.service.ProduceInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author ThreePure
 * @date 2022/3/27 16:26
 * @description: TODO
 * @since 1.8
 */
@Service
public class ProduceInfoServiceImpl implements ProduceInfoService {

    /**切记，业务逻辑层中一定有数据访问层的对象*/
    @Autowired
    ProductInfoMapper productInfoMapper;

    /**
     * 显示全部商品（不分页）
     */
    @Override
    public List<ProductInfo> getAll() {
        return productInfoMapper.selectByExample(new ProductInfoExample());
    }

    /**
     * 分页功能接口
     * @param pageNum
     * @param pageSize
     */
    @Override
    public PageInfo splitPage(int pageNum, int pageSize) {
        //使用分页插件PageHelper工具类完成分页设置
        PageHelper.startPage(pageNum, pageSize);

        //进行PageInfo的数据封装，对于有条件的查询操作，必须要创建ProductInfoExample对象
        ProductInfoExample example = new ProductInfoExample();
        //设置排序，按主键降序（方便插入数据后快速查看） select * from product_info order by p_id desc ;
        example.setOrderByClause("p_id desc");
        //设置排序后，取集合，切记先设置PageHelper.startPage(pageNum, pageSize);
        List<ProductInfo> list = productInfoMapper.selectByExample(example);
        //将查询到的集合封装到PageInfo对象中。
        PageInfo<ProductInfo> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 新增商品（上架商品）
     * @param info 商品实体类
     */
    @Override
    public int save(ProductInfo info) {

        return productInfoMapper.insert(info);
    }

    /**
     * 按主键id查询商品信息
     * @param pid 商品ID
     */
    @Override
    public ProductInfo getById(int pid) {
        return productInfoMapper.selectByPrimaryKey(pid);
    }

    /**
     * 更新商品
     * @param info 商品对象
     */
    @Override
    public int update(ProductInfo info) {
        return productInfoMapper.updateByPrimaryKey(info);
    }

    /**
     * 删除单个商品
     * @param pid 被删除商品的id
     */
    @Override
    public int delete(int pid) {
        return productInfoMapper.deleteByPrimaryKey(pid);
    }

    /**
     * 批量删除商品
     * @param ids 被删除的商品id集合
     */
    @Override
    public int deleteBatch(String[] ids) {
        return productInfoMapper.deleteBatch(ids);
    }

    /**
     * 多条件查询商品
     * @param vo :查询条件对象
     */
    @Override
    public List<ProductInfo> selectCondition(ProductInfoVo vo) {
        return productInfoMapper.selectCondition(vo);
    }

    /**
     * 多条件查询商品+分页功能
     * @param vo ：多条件查询的对象，含页面属性
     * @param pageSize ：每页大小
     */
    @Override
    public PageInfo<ProductInfo> splitPageVo(ProductInfoVo vo, int pageSize) {
        //取出集合之前，先要设置PageHelper.startPage()属性
        PageHelper.startPage(vo.getPage(), pageSize);
        List<ProductInfo> list = productInfoMapper.selectCondition(vo);
        return new PageInfo<>(list);
    }
}
